package com.da.javatest.interview.session2;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * @author chenlida
 * @date 2020/4/1 20:00
 *
 * 线程池有什么优点？
 * 降低资源消耗：重用存在的线程，减少对象创建销毁的开销。
 * 提高响应速度。可有效的控制最大并发线程数，提高系统资源的使用率，同时避免过多资源竞争，避免堵塞。当任务到达时，任务可以不需要的等到线程创建就能立即执行。
 * 提高线程的可管理性。线程是稀缺资源，如果无限制的创建，不仅会消耗系统资源，还会降低系统的稳定性，使用线程池可以进行统一的分配，调优和监控。
 * 附加功能：提供定时执行、定期执行、单线程、并发数控制等功能。
 *
 * 线程池都有哪些状态？
 * RUNNING：这是最正常的状态，接受新的任务，处理等待队列中的任务。
 * SHUTDOWN：不接受新的任务提交，但是会继续处理等待队列中的任务。
 * STOP：不接受新的任务提交，不再处理等待队列中的任务，中断正在执行任务的线程。
 * TIDYING：所有的任务都销毁了，workCount 为 0，线程池的状态在转换为 TIDYING 状态时，会执行钩子方法 terminated()。
 * TERMINATED：terminated()方法结束后，线程池的状态就会变成这个。
 */
public class Test21ThreadPool {
    public static void main(String[] args) {
        ExecutorService threadPool = Executors.newFixedThreadPool(5);
        // ExecutorService threadPool = Executors.newSingleThreadExecutor();
        // ExecutorService threadPool1 = Executors.newCachedThreadPool();

        try {
            for (int i = 0; i < 10; i++) {
                threadPool.execute(() -> {
                    System.out.println(Thread.currentThread().getName() + " 办理业务");
                });
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            threadPool.shutdown();
        }
    }
}
